/*
给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。

有效字符串需满足：

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
var isValid = function (s) {
    //建立映射关系：左括号为key，右括号为value
    const mapping = new Map();
    mapping.set("(", ")");
    mapping.set("[", "]");
    mapping.set("{", "}");
    //辅助栈
    const stack = [];
    //遍历字符串
    for (let i = 0; i < s.length; i++) {
        //如果mapping中有此key(说明这是个左括号)
        if (mapping.has(s[i])) {
            //获取该key对应的value，放入栈中
            stack.push(mapping.get(s[i]));
        } else {//如果没有，说明是右括号
            //出栈，与当前值做对比
            if (stack.pop() !== s[i]) {
                return false;
            }
        }
    }
    //循环结束时，如果stack不为空，说明有左括号没配对
    return stack.length == 0 ? true : false;
}